#Boa:Frame:campanias

import wx
import wx.stc
import wx.richtext
import utiles
import consultasBD
import servers
import os
from mktsend import Sender
import re

username = 'sussan'
password = 'suSSan42'
reporteTO = [unicode('ceportela@gmail.com','utf-8')]

def create(parent):
    return campanias(parent)

[wxID_CAMPANIAS, wxID_CAMPANIASBUTTON1, wxID_CAMPANIASBUTTON10, 
 wxID_CAMPANIASBUTTON11, wxID_CAMPANIASBUTTON12, wxID_CAMPANIASBUTTON13, 
 wxID_CAMPANIASBUTTON14, wxID_CAMPANIASBUTTON15, wxID_CAMPANIASBUTTON2, 
 wxID_CAMPANIASBUTTON3, wxID_CAMPANIASBUTTON4, wxID_CAMPANIASBUTTON5, 
 wxID_CAMPANIASBUTTON6, wxID_CAMPANIASBUTTON7, wxID_CAMPANIASBUTTON8, 
 wxID_CAMPANIASBUTTON9, wxID_CAMPANIASCHECKBOX1, wxID_CAMPANIASCHECKBOX2, 
 wxID_CAMPANIASCHECKBOX3, wxID_CAMPANIASCHECKBOX4, wxID_CAMPANIASCHECKBOX5, 
 wxID_CAMPANIASCHECKBOX6, wxID_CAMPANIASCHOICE1, wxID_CAMPANIASCOMBOBOX1, 
 wxID_CAMPANIASCOMBOBOX2, wxID_CAMPANIASDATEPICKERCTRL1, 
 wxID_CAMPANIASLISTBOX1, wxID_CAMPANIASPANEL1, wxID_CAMPANIASPANEL2, 
 wxID_CAMPANIASPANEL3, wxID_CAMPANIASPANEL4, wxID_CAMPANIASRADIOBUTTON1, 
 wxID_CAMPANIASRADIOBUTTON10, wxID_CAMPANIASRADIOBUTTON11, 
 wxID_CAMPANIASRADIOBUTTON12, wxID_CAMPANIASRADIOBUTTON2, 
 wxID_CAMPANIASRADIOBUTTON3, wxID_CAMPANIASRADIOBUTTON4, 
 wxID_CAMPANIASRADIOBUTTON5, wxID_CAMPANIASRADIOBUTTON6, 
 wxID_CAMPANIASRADIOBUTTON7, wxID_CAMPANIASRADIOBUTTON8, 
 wxID_CAMPANIASRADIOBUTTON9, wxID_CAMPANIASSTATICTEXT1, 
 wxID_CAMPANIASSTATICTEXT10, wxID_CAMPANIASSTATICTEXT11, 
 wxID_CAMPANIASSTATICTEXT12, wxID_CAMPANIASSTATICTEXT13, 
 wxID_CAMPANIASSTATICTEXT14, wxID_CAMPANIASSTATICTEXT15, 
 wxID_CAMPANIASSTATICTEXT16, wxID_CAMPANIASSTATICTEXT17, 
 wxID_CAMPANIASSTATICTEXT18, wxID_CAMPANIASSTATICTEXT19, 
 wxID_CAMPANIASSTATICTEXT2, wxID_CAMPANIASSTATICTEXT20, 
 wxID_CAMPANIASSTATICTEXT21, wxID_CAMPANIASSTATICTEXT22, 
 wxID_CAMPANIASSTATICTEXT23, wxID_CAMPANIASSTATICTEXT24, 
 wxID_CAMPANIASSTATICTEXT3, wxID_CAMPANIASSTATICTEXT4, 
 wxID_CAMPANIASSTATICTEXT5, wxID_CAMPANIASSTATICTEXT6, 
 wxID_CAMPANIASSTATICTEXT7, wxID_CAMPANIASSTATICTEXT8, 
 wxID_CAMPANIASSTATICTEXT9, wxID_CAMPANIASSTYLEDTEXTCTRL1, 
 wxID_CAMPANIASTEXTCTRL1, wxID_CAMPANIASTEXTCTRL2, wxID_CAMPANIASTEXTCTRL3, 
 wxID_CAMPANIASTEXTCTRL4, wxID_CAMPANIASTEXTCTRL5, wxID_CAMPANIASTEXTCTRL6, 
 wxID_CAMPANIASTEXTCTRL7, 
] = [wx.NewId() for _init_ctrls in range(75)]

class campanias(wx.Frame):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Frame.__init__(self, id=wxID_CAMPANIAS, name='campanias',
              parent=prnt, pos=wx.Point(28, 20), size=wx.Size(945, 560),
              style=wx.DEFAULT_FRAME_STYLE, title='Campa\xf1as')
        self.SetClientSize(wx.Size(937, 533))

        self.panel1 = wx.Panel(id=wxID_CAMPANIASPANEL1, name='panel1',
              parent=self, pos=wx.Point(0, 0), size=wx.Size(937, 533),
              style=wx.TAB_TRAVERSAL)

        self.listBox1 = wx.ListBox(choices=[], id=wxID_CAMPANIASLISTBOX1,
              name='listBox1', parent=self.panel1, pos=wx.Point(8, 24),
              size=wx.Size(352, 496), style=0)
        self.listBox1.Enable(True)
        self.listBox1.Bind(wx.EVT_LISTBOX_DCLICK, self.OnDobleClick,
              id=wxID_CAMPANIASLISTBOX1)

        self.comboBox1 = wx.ComboBox(choices=[], id=wxID_CAMPANIASCOMBOBOX1,
              name='comboBox1', parent=self.panel1, pos=wx.Point(368, 24),
              size=wx.Size(168, 21), style=0, value='')
        self.comboBox1.SetLabel('')
        self.comboBox1.Enable(False)
        self.comboBox1.Bind(wx.EVT_COMBOBOX, self.OnComboSucursales,
              id=wxID_CAMPANIASCOMBOBOX1)

        self.checkBox2 = wx.CheckBox(id=wxID_CAMPANIASCHECKBOX2,
              label='Todas las sucursales', name='checkBox2',
              parent=self.panel1, pos=wx.Point(368, 48), size=wx.Size(160, 13),
              style=0)
        self.checkBox2.SetValue(True)
        self.checkBox2.Bind(wx.EVT_CHECKBOX, self.OnGlobal,
              id=wxID_CAMPANIASCHECKBOX2)

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_CAMPANIASDATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self.panel1, pos=wx.Point(552, 24),
              size=wx.Size(96, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
        self.datePickerCtrl1.Bind(wx.EVT_DATE_CHANGED, self.OnSeleccionaFecha,
              id=wxID_CAMPANIASDATEPICKERCTRL1)

        self.checkBox3 = wx.CheckBox(id=wxID_CAMPANIASCHECKBOX3,
              label='Ignorar fecha compra', name='checkBox3',
              parent=self.panel1, pos=wx.Point(552, 48), size=wx.Size(128, 13),
              style=0)
        self.checkBox3.SetValue(False)
        self.checkBox3.Bind(wx.EVT_CHECKBOX, self.OnTotalMail,
              id=wxID_CAMPANIASCHECKBOX3)

        self.button3 = wx.Button(id=wxID_CAMPANIASBUTTON3, label='Cargar email',
              name='button3', parent=self.panel1, pos=wx.Point(704, 24),
              size=wx.Size(80, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnCargar,
              id=wxID_CAMPANIASBUTTON3)

        self.radioButton9 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON9,
              label='Alfabetico', name='radioButton9', parent=self.panel1,
              pos=wx.Point(704, 48), size=wx.Size(72, 13), style=0)
        self.radioButton9.SetValue(True)

        self.radioButton10 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON10,
              label='Puntaje', name='radioButton10', parent=self.panel1,
              pos=wx.Point(776, 48), size=wx.Size(64, 13), style=0)
        self.radioButton10.SetValue(False)

        self.button4 = wx.Button(id=wxID_CAMPANIASBUTTON4,
              label='exportar e-mail a CVS', name='button4', parent=self.panel1,
              pos=wx.Point(784, 24), size=wx.Size(136, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnExportar,
              id=wxID_CAMPANIASBUTTON4)

        self.panel2 = wx.Panel(id=wxID_CAMPANIASPANEL2, name='panel2',
              parent=self.panel1, pos=wx.Point(368, 64), size=wx.Size(224, 48),
              style=wx.TAB_TRAVERSAL)

        self.staticText4 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT4,
              label='Fraccionar lista e-mail', name='staticText4',
              parent=self.panel2, pos=wx.Point(0, 0), size=wx.Size(103, 13),
              style=0)

        self.radioButton1 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON1,
              label='no fraccionar', name='radioButton1', parent=self.panel2,
              pos=wx.Point(0, 16), size=wx.Size(81, 13), style=0)
        self.radioButton1.SetValue(True)
        self.radioButton1.Enable(False)
        self.radioButton1.Bind(wx.EVT_RADIOBUTTON, self.OnNoFracciona,
              id=wxID_CAMPANIASRADIOBUTTON1)

        self.radioButton2 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON2,
              label='en 2', name='radioButton2', parent=self.panel2,
              pos=wx.Point(0, 32), size=wx.Size(56, 13), style=0)
        self.radioButton2.SetValue(False)
        self.radioButton2.Enable(False)
        self.radioButton2.Bind(wx.EVT_RADIOBUTTON, self.OnParte2,
              id=wxID_CAMPANIASRADIOBUTTON2)

        self.radioButton3 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON3,
              label='3', name='radioButton3', parent=self.panel2,
              pos=wx.Point(96, 16), size=wx.Size(32, 13), style=0)
        self.radioButton3.SetValue(False)
        self.radioButton3.Enable(False)
        self.radioButton3.Bind(wx.EVT_RADIOBUTTON, self.OnParte3,
              id=wxID_CAMPANIASRADIOBUTTON3)

        self.radioButton4 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON4,
              label='4', name='radioButton4', parent=self.panel2,
              pos=wx.Point(96, 32), size=wx.Size(32, 13), style=0)
        self.radioButton4.SetValue(False)
        self.radioButton4.Enable(False)
        self.radioButton4.Bind(wx.EVT_RADIOBUTTON, self.OnParte4,
              id=wxID_CAMPANIASRADIOBUTTON4)

        self.button7 = wx.Button(id=wxID_CAMPANIASBUTTON7, label='Guardar',
              name='button7', parent=self.panel2, pos=wx.Point(136, 16),
              size=wx.Size(75, 23), style=0)
        self.button7.Enable(False)
        self.button7.Bind(wx.EVT_BUTTON, self.OnGuardarPartes,
              id=wxID_CAMPANIASBUTTON7)

        self.panel3 = wx.Panel(id=wxID_CAMPANIASPANEL3, name='panel3',
              parent=self.panel1, pos=wx.Point(584, 64), size=wx.Size(184, 56),
              style=wx.TAB_TRAVERSAL)

        self.staticText22 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT22,
              label='Cargar parte', name='staticText22', parent=self.panel3,
              pos=wx.Point(8, 0), size=wx.Size(62, 13), style=0)

        self.radioButton5 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON5,
              label='1', name='radioButton5', parent=self.panel3,
              pos=wx.Point(8, 16), size=wx.Size(32, 13), style=0)
        self.radioButton5.SetValue(True)
        self.radioButton5.Enable(False)

        self.radioButton6 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON6,
              label='2', name='radioButton6', parent=self.panel3,
              pos=wx.Point(8, 32), size=wx.Size(32, 13), style=0)
        self.radioButton6.SetValue(False)
        self.radioButton6.Enable(False)

        self.radioButton7 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON7,
              label='3', name='radioButton7', parent=self.panel3,
              pos=wx.Point(48, 16), size=wx.Size(32, 13), style=0)
        self.radioButton7.SetValue(False)
        self.radioButton7.Enable(False)

        self.radioButton8 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON8,
              label='4', name='radioButton8', parent=self.panel3,
              pos=wx.Point(48, 32), size=wx.Size(32, 13), style=0)
        self.radioButton8.SetValue(False)
        self.radioButton8.Enable(False)

        self.button6 = wx.Button(id=wxID_CAMPANIASBUTTON6, label='Cargar',
              name='button6', parent=self.panel3, pos=wx.Point(96, 16),
              size=wx.Size(75, 23), style=0)
        self.button6.Enable(False)

        self.textCtrl4 = wx.TextCtrl(id=wxID_CAMPANIASTEXTCTRL4,
              name='textCtrl4', parent=self.panel1, pos=wx.Point(368, 152),
              size=wx.Size(416, 21), style=0, value='')

        self.styledTextCtrl1 = wx.stc.StyledTextCtrl(id=wxID_CAMPANIASSTYLEDTEXTCTRL1,
              name='styledTextCtrl1', parent=self.panel1, pos=wx.Point(368,
              192), size=wx.Size(496, 184), style=0)

        self.checkBox4 = wx.CheckBox(id=wxID_CAMPANIASCHECKBOX4, label='',
              name='checkBox4', parent=self.panel1, pos=wx.Point(368, 416),
              size=wx.Size(16, 13), style=0)
        self.checkBox4.SetValue(False)
        self.checkBox4.Bind(wx.EVT_CHECKBOX, self.OnMINOMBRE,
              id=wxID_CAMPANIASCHECKBOX4)

        self.comboBox2 = wx.ComboBox(choices=[], id=wxID_CAMPANIASCOMBOBOX2,
              name='comboBox2', parent=self.panel1, pos=wx.Point(368, 448),
              size=wx.Size(184, 21), style=0, value='')
        self.comboBox2.SetLabel('')

        self.checkBox1 = wx.CheckBox(id=wxID_CAMPANIASCHECKBOX1,
              label='Prueba envio a cuentas', name='checkBox1',
              parent=self.panel1, pos=wx.Point(552, 432), size=wx.Size(152, 13),
              style=0)
        self.checkBox1.SetValue(True)
        self.checkBox1.Bind(wx.EVT_CHECKBOX, self.OnPruebaEnvio,
              id=wxID_CAMPANIASCHECKBOX1)

        self.textCtrl2 = wx.TextCtrl(id=wxID_CAMPANIASTEXTCTRL2,
              name='textCtrl2', parent=self.panel1, pos=wx.Point(552, 448),
              size=wx.Size(192, 21), style=0, value='dlevental@gmail.com')

        self.textCtrl5 = wx.TextCtrl(id=wxID_CAMPANIASTEXTCTRL5,
              name='textCtrl5', parent=self.panel1, pos=wx.Point(552, 472),
              size=wx.Size(192, 21), style=0, value='ceportela@gmail.com')

        self.textCtrl6 = wx.TextCtrl(id=wxID_CAMPANIASTEXTCTRL6,
              name='textCtrl6', parent=self.panel1, pos=wx.Point(744, 448),
              size=wx.Size(184, 21), style=0, value='')

        self.textCtrl7 = wx.TextCtrl(id=wxID_CAMPANIASTEXTCTRL7,
              name='textCtrl7', parent=self.panel1, pos=wx.Point(744, 472),
              size=wx.Size(184, 21), style=0, value='')

        self.checkBox5 = wx.CheckBox(id=wxID_CAMPANIASCHECKBOX5,
              label='Introducir demora', name='checkBox5', parent=self.panel1,
              pos=wx.Point(368, 472), size=wx.Size(120, 13), style=0)
        self.checkBox5.SetValue(False)
        self.checkBox5.Bind(wx.EVT_CHECKBOX, self.OnIntroducirDemora,
              id=wxID_CAMPANIASCHECKBOX5)

        self.choice1 = wx.Choice(choices=["1", "2", "3", "4", "5"],
              id=wxID_CAMPANIASCHOICE1, name='choice1', parent=self.panel1,
              pos=wx.Point(368, 504), size=wx.Size(40, 21), style=0)
        self.choice1.Enable(False)
        self.choice1.Bind(wx.EVT_CHOICE, self.OnElegirSegundos,
              id=wxID_CAMPANIASCHOICE1)

        self.button8 = wx.Button(id=wxID_CAMPANIASBUTTON8, label='Limpiar',
              name='button8', parent=self.panel1, pos=wx.Point(744, 504),
              size=wx.Size(75, 23), style=0)
        self.button8.Bind(wx.EVT_BUTTON, self.OnLimpiar,
              id=wxID_CAMPANIASBUTTON8)

        self.button1 = wx.Button(id=wxID_CAMPANIASBUTTON1, label='Enviar',
              name='button1', parent=self.panel1, pos=wx.Point(552, 504),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnEnviar,
              id=wxID_CAMPANIASBUTTON1)

        self.button2 = wx.Button(id=wxID_CAMPANIASBUTTON2, label='Salir',
              name='button2', parent=self.panel1, pos=wx.Point(856, 504),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_CAMPANIASBUTTON2)

        self.textCtrl1 = wx.TextCtrl(id=wxID_CAMPANIASTEXTCTRL1,
              name='textCtrl1', parent=self.panel1, pos=wx.Point(872, 104),
              size=wx.Size(48, 21), style=0, value='')
        self.textCtrl1.SetEditable(False)
        self.textCtrl1.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.textCtrl3 = wx.TextCtrl(id=wxID_CAMPANIASTEXTCTRL3,
              name='textCtrl3', parent=self.panel1, pos=wx.Point(416, 504),
              size=wx.Size(80, 21), style=0, value='')
        self.textCtrl3.SetEditable(False)
        self.textCtrl3.Enable(False)

        self.staticText1 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT1,
              label='Clientes / e-mail', name='staticText1', parent=self.panel1,
              pos=wx.Point(8, 8), size=wx.Size(76, 13), style=0)

        self.staticText2 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT2,
              label='Texto del e-mail. Puede usar etiquetas HTML (abajo se ponen algunas como ejemplos)',
              name='staticText2', parent=self.panel1, pos=wx.Point(368, 176),
              size=wx.Size(412, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT3,
              label='Total', name='staticText3', parent=self.panel1,
              pos=wx.Point(840, 104), size=wx.Size(24, 13), style=0)

        self.staticText5 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT5,
              label='Clientes de la sucursal...', name='staticText5',
              parent=self.panel1, pos=wx.Point(368, 8), size=wx.Size(118, 13),
              style=0)

        self.staticText6 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT6,
              label='Envios desde la cuenta', name='staticText6',
              parent=self.panel1, pos=wx.Point(368, 432), size=wx.Size(110, 13),
              style=0)

        self.staticText7 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT7,
              label='Negrita', name='staticText7', parent=self.panel1,
              pos=wx.Point(368, 384), size=wx.Size(35, 13), style=0)

        self.staticText8 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT8,
              label='<b>TEXTO</b>', name='staticText8', parent=self.panel1,
              pos=wx.Point(416, 384), size=wx.Size(91, 13), style=0)
        self.staticText8.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD, False,
              'Tahoma'))

        self.staticText9 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT9,
              label='Italica', name='staticText9', parent=self.panel1,
              pos=wx.Point(512, 384), size=wx.Size(30, 13), style=0)
        self.staticText9.SetFont(wx.Font(8, wx.SWISS, wx.ITALIC, wx.NORMAL,
              False, 'Tahoma'))

        self.staticText10 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT10,
              label='<i>TEXTO</i>', name='staticText10', parent=self.panel1,
              pos=wx.Point(544, 384), size=wx.Size(83, 13), style=0)
        self.staticText10.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD,
              False, 'Tahoma'))

        self.staticText11 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT11,
              label='enlace web', name='staticText11', parent=self.panel1,
              pos=wx.Point(632, 384), size=wx.Size(54, 13), style=0)

        self.staticText12 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT12,
              label='<a href="URL">TEXTO</a>', name='staticText12',
              parent=self.panel1, pos=wx.Point(688, 384), size=wx.Size(160, 13),
              style=0)
        self.staticText12.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD,
              False, 'Tahoma'))

        self.staticText13 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT13,
              label='Para personalizar, MINOMBRE sera reemplazado por el nombre del cliente en cada mail enviado',
              name='staticText13', parent=self.panel1, pos=wx.Point(384, 416),
              size=wx.Size(455, 13), style=0)

        self.staticText15 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT15,
              label='Tiempo de envio', name='staticText15', parent=self.panel1,
              pos=wx.Point(416, 488), size=wx.Size(78, 13), style=0)

        self.staticText16 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT16,
              label='Demora', name='staticText16', parent=self.panel1,
              pos=wx.Point(368, 488), size=wx.Size(37, 13), style=0)

        self.staticText17 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT17,
              label='Asunto', name='staticText17', parent=self.panel1,
              pos=wx.Point(368, 136), size=wx.Size(34, 13), style=0)

        self.staticText18 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT18,
              label='Insertar imagen web', name='staticText18',
              parent=self.panel1, pos=wx.Point(368, 400), size=wx.Size(99, 13),
              style=0)

        self.staticText19 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT19,
              label='<img src="URL IMAGEN">', name='staticText19',
              parent=self.panel1, pos=wx.Point(472, 400), size=wx.Size(149, 13),
              style=0)
        self.staticText19.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD,
              False, 'Tahoma'))

        self.staticText20 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT20,
              label='Fecha compra desde', name='staticText20',
              parent=self.panel1, pos=wx.Point(552, 8), size=wx.Size(99, 13),
              style=0)

        self.staticText14 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT14,
              label='alineacion', name='staticText14', parent=self.panel1,
              pos=wx.Point(632, 400), size=wx.Size(47, 13), style=0)

        self.staticText21 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT21,
              label='<DIV ALIGN="center"></DIV>', name='staticText21',
              parent=self.panel1, pos=wx.Point(688, 400), size=wx.Size(177, 13),
              style=0)
        self.staticText21.SetFont(wx.Font(8, wx.SWISS, wx.NORMAL, wx.BOLD,
              False, 'Tahoma'))

        self.staticText23 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT23,
              label='Caracteres', name='staticText23', parent=self.panel1,
              pos=wx.Point(872, 176), size=wx.Size(53, 13), style=0)

        self.button9 = wx.Button(id=wxID_CAMPANIASBUTTON9, label='a: &aacute;',
              name='button9', parent=self.panel1, pos=wx.Point(872, 208),
              size=wx.Size(56, 23), style=0)
        self.button9.Bind(wx.EVT_BUTTON, self.OnAacute,
              id=wxID_CAMPANIASBUTTON9)

        self.button10 = wx.Button(id=wxID_CAMPANIASBUTTON10,
              label='e: &eacute;', name='button10', parent=self.panel1,
              pos=wx.Point(872, 232), size=wx.Size(56, 23), style=0)
        self.button10.Bind(wx.EVT_BUTTON, self.OnEacute,
              id=wxID_CAMPANIASBUTTON10)

        self.button11 = wx.Button(id=wxID_CAMPANIASBUTTON11,
              label='i: &iacute;', name='button11', parent=self.panel1,
              pos=wx.Point(872, 256), size=wx.Size(56, 23), style=0)
        self.button11.Bind(wx.EVT_BUTTON, self.OnIacute,
              id=wxID_CAMPANIASBUTTON11)

        self.button12 = wx.Button(id=wxID_CAMPANIASBUTTON12,
              label='o: &oacute;', name='button12', parent=self.panel1,
              pos=wx.Point(872, 280), size=wx.Size(56, 23), style=0)
        self.button12.Bind(wx.EVT_BUTTON, self.OnOacute,
              id=wxID_CAMPANIASBUTTON12)

        self.button13 = wx.Button(id=wxID_CAMPANIASBUTTON13,
              label='u: &uacute;', name='button13', parent=self.panel1,
              pos=wx.Point(872, 304), size=wx.Size(56, 23), style=0)
        self.button13.Bind(wx.EVT_BUTTON, self.OnUacute,
              id=wxID_CAMPANIASBUTTON13)

        self.button14 = wx.Button(id=wxID_CAMPANIASBUTTON14,
              label='n: &ntilde;', name='button14', parent=self.panel1,
              pos=wx.Point(872, 328), size=wx.Size(56, 23), style=0)
        self.button14.Bind(wx.EVT_BUTTON, self.Onnacute,
              id=wxID_CAMPANIASBUTTON14)

        self.button15 = wx.Button(id=wxID_CAMPANIASBUTTON15,
              label='N: &Ntilde;', name='button15', parent=self.panel1,
              pos=wx.Point(872, 352), size=wx.Size(56, 23), style=0)
        self.button15.Bind(wx.EVT_BUTTON, self.OnNacute,
              id=wxID_CAMPANIASBUTTON15)

        self.staticText24 = wx.StaticText(id=wxID_CAMPANIASSTATICTEXT24,
              label='html', name='staticText24', parent=self.panel1,
              pos=wx.Point(872, 192), size=wx.Size(20, 13), style=0)

        self.button5 = wx.Button(id=wxID_CAMPANIASBUTTON5, label='Graba texto',
              name='button5', parent=self.panel1, pos=wx.Point(792, 152),
              size=wx.Size(75, 23), style=0)
        self.button5.Bind(wx.EVT_BUTTON, self.OnGrabarTexto,
              id=wxID_CAMPANIASBUTTON5)

        self.checkBox6 = wx.CheckBox(id=wxID_CAMPANIASCHECKBOX6,
              label='Fraccionar por cantidad', name='checkBox6',
              parent=self.panel1, pos=wx.Point(368, 120), size=wx.Size(136, 13),
              style=0)
        self.checkBox6.SetValue(False)
        self.checkBox6.Enable(False)
        self.checkBox6.Bind(wx.EVT_CHECKBOX, self.OnCheckFraccionarPORcantidad,
              id=wxID_CAMPANIASCHECKBOX6)

        self.panel4 = wx.Panel(id=wxID_CAMPANIASPANEL4, name='panel4',
              parent=self.panel1, pos=wx.Point(504, 120), size=wx.Size(160, 16),
              style=wx.TAB_TRAVERSAL)

        self.radioButton11 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON11,
              label='Primeros 9500', name='radioButton11', parent=self.panel4,
              pos=wx.Point(8, 0), size=wx.Size(87, 13), style=0)
        self.radioButton11.SetValue(True)
        self.radioButton11.Enable(False)

        self.radioButton12 = wx.RadioButton(id=wxID_CAMPANIASRADIOBUTTON12,
              label='resto', name='radioButton12', parent=self.panel4,
              pos=wx.Point(104, 0), size=wx.Size(56, 13), style=0)
        self.radioButton12.SetValue(False)
        self.radioButton12.Enable(False)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.cargarCombos()
        self.cargarFecha()
        if os.path.isfile("campaniasMail.txt"):
            f=open("campaniasMail.txt","r")
            text = f.read()
            f.close()
            self.styledTextCtrl1.SetText(text)
            if "Querida <MINOMBRE>:" in text:
                self.checkBox4.SetValue(True)
        self.checkBox2.SetFocus()

    def cargarCombos(self):
        #sucursales y selecciona la sucursal activa
        sql = "SELECT nombre FROM sucursales ORDER BY idsucursal "
        resultado = consultasBD.ordenCrudaDict(sql)
        for i,item in enumerate(resultado):
            self.comboBox1.Append(item["nombre"])
        sucursal = utiles.getSucursalActiva()
        self.comboBox1.SetSelection(int(sucursal)-1)
        #email desde el que se envian los correos
        self.comboBox2.Append("ventas@sussanboutique.com.ar")
        self.comboBox2.SetSelection(0)

    def cargarFecha(self):
        aux = utiles.obtenerFecha("Y-m-d")
        aux = utiles.strToDate(aux)
        fecha = utiles.sumarDiasAFecha(aux,-180)
        utiles.cargar_fecha(fecha,self.datePickerCtrl1)

    def cargarClientes(self,clientes):
        self.listBox1.Clear()
        for item in clientes:
            if self.radioButton9.GetValue():
                nombre = item[0]
                email = item[1]
            else:
                nombre = item[1]
                email = item[2]
            if "***" in nombre: continue #clientes con abogados
            if "NO USAR" in nombre: continue
            if "no usar" in nombre: continue
            cadena = nombre+" / "+email
            self.listBox1.Append(cadena)
        self.cargarMinutos(len(clientes))

    def cargarMinutos(self,total):
        from decimal import Decimal
        segundos = self.choice1.GetSelection()+1
        tiempo = Decimal(str(float(segundos*(total))/60)).quantize(Decimal("0.10"))
        self.textCtrl3.SetLabel(str(tiempo)+" minutos")

    def OnGlobal(self, event):
        if self.checkBox2.GetValue():
            self.comboBox1.Enable(False)
        else:
            self.comboBox1.Enable(True)
            self.comboBox1.SetFocus()

    def OnSalir(self, event):
        texto = self.styledTextCtrl1.GetText()
        self.Close()

    def OnPruebaEnvio(self, event):
        if self.checkBox1.GetValue():
            self.textCtrl2.Enable(True)
            self.textCtrl5.Enable(True)
            self.textCtrl6.Enable(True)
            self.textCtrl7.Enable(True)
            self.textCtrl2.SetFocus()
        else:
            self.textCtrl2.Enable(False)
            self.textCtrl5.Enable(False)
            self.textCtrl6.Enable(False)
            self.textCtrl7.Enable(False)
            self.styledTextCtrl1.SetFocus()

    def OnComboSucursales(self, event):
        self.listBox1.Clear()
        self.button3.SetFocus()

    def OnElegirSegundos(self, event):
        total = len(self.listBox1.GetItems())
        if total <= 0: 
            self.textCtrl3.SetLabel("")
            return
        self.cargarMinutos(total)

    def OnTotalMail(self, event):
        if self.checkBox3.GetValue():
            self.datePickerCtrl1.Enable(False)
            self.button3.SetFocus()
        else:
            self.datePickerCtrl1.Enable(True)
            self.button3.SetFocus()
            
    def OnDobleClick(self, event):
        self.listBox1.Delete(self.listBox1.GetSelection())
        total = len(self.listBox1.GetItems())
        self.textCtrl1.SetLabel(str(total))
        self.cargarMinutos(total)

    def OnSeleccionaFecha(self, event):
        self.button3.SetFocus()

    def OnCargar(self, event):
        print "Buscando clientes"
        opcion = [0,0]
        if self.checkBox2.GetValue(): opcion[0] = 1
        if self.checkBox3.GetValue(): opcion[1] = 1
        fecha = self.datePickerCtrl1.GetLabel()
        fecha = fecha.replace("/","-")
        fecha = utiles.invertirFecha(fecha)+" 00:00:00"
        sucursal = str(self.comboBox1.GetSelection()+1)+"-"
        
        if opcion == [1,1]: #todos los clientes ignorando fecha compra
            if self.radioButton9.GetValue():
                r1 = "SELECT nombre,email,listanegra \n"
            else:
                r1 = "SELECT acumulados,nombre,email,listanegra \n"
            r2 = "FROM cliente WHERE email<>'' AND listanegra<>'1' \n"
            if self.radioButton9.GetValue():
                r3 = "ORDER BY nombre "
            else:
                r3 = "ORDER BY acumulados DESC "
            sql = r1+r2+r3
        elif opcion == [1,0]: #todos los clientes a partir de tal fecha de compra
            if self.radioButton9.GetValue():
                r1 = "SELECT c.nombre,c.email \n"
            else:
                r1 = "SELECT c.acumulados,c.nombre,c.email \n"
            r2 = "FROM cliente c, \n"
            r3 = "     (SELECT DISTINCT idcliente FROM ventas \n"
            r4 = "      WHERE fecha>='"+fecha+"') AS p1 \n"
            r5 = "WHERE p1.idcliente=c.idcliente AND c.email<>'' \n"
            r6 = "      AND c.listanegra<>'1' \n"
            if self.radioButton9.GetValue():
                r7 = "ORDER BY nombre "
            else:
                r7 = "ORDER BY acumulados DESC "
            sql = r1+r2+r3+r4+r5+r6+r7
        elif opcion == [0,1]: #cliente de X sucursal ignorando fecha de compra
            if self.radioButton9.GetValue():
                r1 = "SELECT nombre,email \n"
            else:
                r1 = "SELECT acumulados,nombre,email \n"
            r2 = "FROM cliente \n"
            r3 = "WHERE idcliente LIKE '%"+sucursal+"%' \n"
            r4 = "      AND listanegra<>'1' AND email<>'' \n"
            if self.radioButton9.GetValue():
                r5 = "ORDER BY nombre "
            else:
                r5 = "ORDER BY acumulados DESC "
            sql = r1+r2+r3+r4+r5
        else: #[0,0] cliente de X sucursal a partir de fecha de compra
            if self.radioButton9.GetValue():
                r1 = "SELECT c.nombre,c.email \n"
            else:
                r1 = "SELECT c.acumulados,c.nombre,c.email \n"
            r2 = "FROM cliente c, \n"
            r3 = "     (SELECT DISTINCT idcliente FROM ventas \n"
            r4 = "      WHERE fecha>='"+fecha+"') AS p1 \n"
            r5 = "WHERE p1.idcliente=c.idcliente AND email<>'' \n"
            r6 = "      AND p1.idcliente LIKE '%"+sucursal+"%' \n"
            r7 = "      AND c.listanegra<>'1' "
            if self.radioButton9.GetValue():
                r8 = "ORDER BY c.nombre "
            else:
                r8 = "ORDER BY acumulados DESC "
            sql = r1+r2+r3+r4+r5+r6+r7+r8

        resultado = consultasBD.ordenCruda(sql)
        if resultado == () or resultado == None:
            texto = "Se produjo un error durante la lectura.\nVerifique"
            utiles.mensaje(None,texto)

        clientes = []
        for item in resultado:
            clientes.append(item)

        print "Procesando lista de clientes"
        clientes = set(clientes)
        clientes = list(clientes)
        if self.radioButton9.GetValue():
            clientes.sort()
        else:
            clientes.sort(reverse=True)

        self.radioButton1.Enable(True)
        self.radioButton2.Enable(True)
        self.radioButton3.Enable(True)
        self.radioButton4.Enable(True)
        self.button7.Enable(True)
        self.checkBox6.Enable(True)

        self.textCtrl1.SetLabel(str(len(clientes)))
        self.cargarClientes(clientes)

    def OnExportar(self, event):
        if self.checkBox1.GetValue():
            clientes = []
            clientes.append("PRUEBA ENVIO / "+self.textCtrl2.GetLabel())
        else:
            clientes = self.listBox1.GetItems()
        nameFile = "c:\\matrisamor.doc\\clientesemail.cvs"
        archivo = open(nameFile,"w")
        archivo.writelines("apellido,email"+"\n")
        total = 0
        for cliente in clientes:
            cadena = cliente.split(" / ")
            archivo.writelines(cadena[0]+","+cadena[1]+"\n")
            total+= 1
        archivo.close()
        texto = "Exportados "+str(total)+" clientes en archivo\n"
        texto+= "c:\matrisamor.doc\clientesemail.cvs"
        utiles.mensaje(None,texto)

    def seleccionarcuentaenvio(self):
        seleccion = self.comboBox2.GetSelection()
        sucursales = len(self.comboBox1.GetItems())
        if seleccion == sucursales:
            self.mail_server = mail_server_default
            self.mail_host = mail_host_default
            self.mail_user = mail_user_default
            self.mail_pass = mail_pass_default
            self.mail_cuenta = mail_cuenta_default
            self.mail_port = mail_port_default
            return
        self.mail_server = servers.mailservername[seleccion]
        self.mail_host = servers.mailhost[seleccion]
        self.mail_user = servers.mailuser[seleccion]
        self.mail_pass = servers.mailpassword[seleccion]
        self.mail_cuenta = servers.mailmail[seleccion]
        self.mail_port = servers.mailport[seleccion]
            
    def OnMINOMBRE(self, event):
        if self.checkBox4.GetValue():
            #agregar texto
            texto = self.styledTextCtrl1.GetText()
            self.styledTextCtrl1.ClearAll()
            self.styledTextCtrl1.AppendText("Querida <MINOMBRE>: "+texto)
            texto = "El envio personalizado puede llevar horas\n"
            texto+= "dependiendo de la cantidad de e-mail.\n"
            texto+= "Asegurese de querer realizar esto."
            utiles.mensaje(None,texto)
        else:
            #quitar texto
            texto = self.styledTextCtrl1.GetText()
            texto = texto.replace("Querida <MINOMBRE>: ","")
            self.styledTextCtrl1.ClearAll()
            self.styledTextCtrl1.AppendText(texto)

    def OnIntroducirDemora(self, event):
        if self.checkBox5.GetValue():
            self.choice1.Enable(True)
            self.textCtrl3.Enable(True)
        else:
            self.choice1.Enable(False)
            self.textCtrl3.Enable(False)

    def OnAacute(self, event):
        posicion = self.styledTextCtrl1.GetCurrentPos()
        texto = self.styledTextCtrl1.GetText()
        texto = texto[:posicion]+"&aacute;"+texto[posicion:]
        self.styledTextCtrl1.ClearAll()
        self.styledTextCtrl1.AppendText(texto)
        self.styledTextCtrl1.SetCurrentPos(posicion+9)
        self.textCtrl4.SetFocus()

    def OnEacute(self, event):
        posicion = self.styledTextCtrl1.GetCurrentPos()
        texto = self.styledTextCtrl1.GetText()
        texto = texto[:posicion]+"&eacute;"+texto[posicion:]
        self.styledTextCtrl1.ClearAll()
        self.styledTextCtrl1.AppendText(texto)
        self.styledTextCtrl1.SetCurrentPos(posicion+9)
        self.textCtrl4.SetFocus()

    def OnIacute(self, event):
        posicion = self.styledTextCtrl1.GetCurrentPos()
        texto = self.styledTextCtrl1.GetText()
        texto = texto[:posicion]+"&iacute;"+texto[posicion:]
        self.styledTextCtrl1.ClearAll()
        self.styledTextCtrl1.AppendText(texto)
        self.styledTextCtrl1.SetCurrentPos(posicion+9)
        self.textCtrl4.SetFocus()

    def OnOacute(self, event):
        posicion = self.styledTextCtrl1.GetCurrentPos()
        texto = self.styledTextCtrl1.GetText()
        texto = texto[:posicion]+"&oacute;"+texto[posicion:]
        self.styledTextCtrl1.ClearAll()
        self.styledTextCtrl1.AppendText(texto)
        self.styledTextCtrl1.SetCurrentPos(posicion+9)
        self.textCtrl4.SetFocus()

    def OnUacute(self, event):
        posicion = self.styledTextCtrl1.GetCurrentPos()
        texto = self.styledTextCtrl1.GetText()
        texto = texto[:posicion]+"&uacute;"+texto[posicion:]
        self.styledTextCtrl1.ClearAll()
        self.styledTextCtrl1.AppendText(texto)
        self.styledTextCtrl1.SetCurrentPos(posicion+9)
        self.textCtrl4.SetFocus()

    def Onnacute(self, event):
        posicion = self.styledTextCtrl1.GetCurrentPos()
        texto = self.styledTextCtrl1.GetText()
        texto = texto[:posicion]+"&ntilde;"+texto[posicion:]
        self.styledTextCtrl1.ClearAll()
        self.styledTextCtrl1.AppendText(texto)
        self.styledTextCtrl1.SetCurrentPos(posicion+9)
        self.textCtrl4.SetFocus()

    def OnNacute(self, event):
        posicion = self.styledTextCtrl1.GetCurrentPos()
        texto = self.styledTextCtrl1.GetText()
        texto = texto[:posicion]+"&Ntilde;"+texto[posicion:]
        self.styledTextCtrl1.ClearAll()
        self.styledTextCtrl1.AppendText(texto)
        self.styledTextCtrl1.SetCurrentPos(posicion+9)
        self.textCtrl4.SetFocus()

    def OnGrabarTexto(self, event):
        f=open("campaniasMail.txt","w")
        text = unicode(str(self.styledTextCtrl1.GetText()),'utf-8')
        f.write(text)
        f.close()

    def OnLimpiar(self, event):
        self.comboBox1.Clear()
        self.comboBox2.Clear()
        self.listBox1.Clear()
        self.cargarCombos()
        self.cargarFecha()
        self.checkBox1.SetValue(True)
        self.checkBox2.SetValue(True)
        self.checkBox3.SetValue(False)
        self.checkBox4.SetValue(False)
        self.checkBox5.SetValue(False)
        self.comboBox1.Enable(False)
        self.choice1.Enable(False)
        self.textCtrl3.Enable(False)
        self.textCtrl2.SetLabel("dlevental@gmail.com")
        self.textCtrl5.SetLabel("ceportela@gmail.com")
        self.textCtrl6.SetLabel("")
        self.textCtrl7.SetLabel("")
        self.textCtrl2.Enable(True)
        self.textCtrl5.Enable(True)
        self.textCtrl6.Enable(True)
        self.textCtrl7.Enable(True)
        self.textCtrl4.SetLabel("")
        self.styledTextCtrl1.ClearAll()
        self.textCtrl1.SetLabel("")
        self.choice1.SetSelection(-1)
        self.datePickerCtrl1.Enable(True)
        self.comboBox1.SetFocus()

    def verificar(self):
        if self.textCtrl4.GetLabel() == "":
            utiles.mensaje(None,"Debe escribir un ASUNTO")
            self.textCtrl4.SetFocus()
            return False
        if self.styledTextCtrl1.GetText()=="":
            utiles.mensaje(None,"Debe escribir un Texto de Mensaje")
            self.styledTextCtrl1.SetFocus()
            return False
        if self.textCtrl2.GetLabel()=="" and \
           self.textCtrl5.GetLabel()=="" and \
           self.textCtrl6.GetLabel()=="" and \
           self.textCtrl7.GetLabel()=="" and self.checkBox1.GetValue():
            #direcciones de prueba 1, 2, 3 y 4
            utiles.mensaje(None,"Debe seleccionar una cuenta de envio")
            self.textCtrl2.SetFocus()
            return False
        if not self.checkBox1.GetValue() and self.listBox1.GetItems() == []:
            texto = "Debe seleccionar e-mail hacia donde enviar\n"
            texto+= "(la lista de clientes o cuenta de prueba)"
            utiles.mensaje(None,texto)
            self.button3.SetFocus()
            return False
        if self.comboBox2.GetSelection()<0:
            texto = "Debe seleccionar la cuenta desde la que se envia"
            utiles.mensaje(None,texto)
            self.comboBox2.SetFocus()
            return False
        return True

    def verificarEmail(self,email):
        if len(email) > 7:
            if re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) != None:
                return True
        return False
##        aux = email
##        if aux.count("@") != 1:
##            return False
##        for caracter in aux:
##            if (ord(caracter) not in range(65,91)) and \
##               (ord(caracter) not in range(97,123)) and \
##               (ord(caracter) not in range(48,58)) and \
##               (caracter not in [".","-","_","@"]):
##                   return False
##        return True

    def registroLOGenviados(self,texto):
        f=open("c:\\matrisamor.doc\\reportes-LOGemail.txt","a")
        f.write(texto+"\n")
        f.close()
        
    def OnEnviar(self, event):
        if not self.verificar():
            return
        to = []
        f=open("c:\\matrisamor.doc\\reportes-LOGemail.txt","w")
        f.write("REPORTE DE e-mail\n\n")
        f.close()
        print "Reporte de e-mail iniciado"

        if self.checkBox1.GetValue():
            email1 = self.textCtrl2.GetLabel()
            email2 = self.textCtrl5.GetLabel()
            email3 = self.textCtrl6.GetLabel()
            email4 = self.textCtrl7.GetLabel()
            if email1 != "":
                if self.verificarEmail(email1):
                    to.append(unicode(str("<"+email1+">"),'utf-8'))
                else:
                    self.registroLOGenviados("ERROR: "+email1)
            if email2!="":
                if self.verificarEmail(email2):
                    to.append(unicode(str("<"+email2+">"),'utf-8'))
                else:
                    self.registroLOGenviados("ERROR: "+email2)
            if email3!="":
                if self.verificarEmail(email3):
                    to.append(unicode(str("<"+email3+">"),'utf-8'))
                else:
                    self.registroLOGenviados("ERROR: "+email3)
            if email4!="":
                if self.verificarEmail(email4):
                    to.append(unicode(str("<"+email4+">"),'utf-8'))
                else:
                    self.registroLOGenviados("ERROR: "+email4)
        else:
            for item in self.listBox1.GetItems():
                nombre,email = item.split(" / ")
                nombre = nombre
                email = email
                if self.verificarEmail(email):
                    to.append(nombre+" <"+email+">")
                else:
                    self.registroLOGenviados("ERROR: "+nombre+" "+email)

        self.registroLOGenviados("\nFin preparacion lista de correos a enviar")
        
        f=open("campaniasMail.txt","w")
        text = unicode(str(self.styledTextCtrl1.GetText()),'utf-8')
        f.write(text)
        f.close()

        subject = unicode(str(self.textCtrl4.GetLabel()),'utf-8')
        modelo = unicode(str(self.styledTextCtrl1.GetText()),'utf-8')
        text = subject

        if self.checkBox4.GetValue(): #envio personalizado
            self.envioPersonalizado(to,subject,modelo,text)
            return

        html = modelo
        html = html.replace("\n","<br>")

        if self.checkBox6.GetValue():
            print "-Lista de Clientes de",len(to)," clientes"
            if self.radioButton11.GetValue():
                print "-Limitando envio a los primeros 9500 clientes"
                to = to[:9500]
            else:
                print "-Enviando desde el cliente 9500 en adelante"
                to = to[9501:]
            print "-Lista de clientes limitada a",len(to)

        s = Sender(username, password)
        print "Enviando correos"
        self.registroLOGenviados("\nEnviando correos")
        resultado = s.send(to,subject,text,html) # Esta linea debe devolver un "OK"
        if resultado!='"OK"':
            print "Enviando informe de resultados erroneos"
            self.registroLOGenviados("\nEnviando informe de resultados erroneos:\n"+resultado)
            subject = unicode('Informe de envios de campania','utf-8')
            to = reporteTO
            text = unicode('Informe de envios de campania','utf-8')
            html = unicode(resultado)
            resultado = s.send(to,subject,text,html)
            print "Reportes de correos enviados: ",resultado
            utiles.mensaje(None,"ERROR enviando campania")
        else:
            print "Campania enviada"
            self.registroLOGenviados("\nCampania enviada: "+resultado)
            self.registroLOGenviados("Correos procesados: "+str(len(to)))
            utiles.mensaje(None,"Campania enviada")

    def envioPersonalizado(self,to,subject,html,text):
        longitud = len(to)
        minutos = longitud/60
        horas = minutos/60
        texto = "ATENCION: Este proceso demorara aproximadamente\n"
        texto+= str(minutos)+" minutos (aprox. entre "+str(horas)+" y "+str(horas+1)+" horas).\n"
        texto+= "\n"
        texto+= "Desea proceder?\n\n"
        texto+= "ACEPTAR = envia correos            CANCELAR = salir"
        import Dialog2
        confirma = Dialog2.Dialog2(self, texto)
        try:
            confirma.ShowModal()
            if confirma.getSeleccion():
                seguir = True
            else:
                seguir = False
        except:
            return
        if not seguir:
            return

        enviados = 0
        erroneos = 0
        correosErroneos = []
        modelo = html
        s = Sender(username, password)
        print "Enviando correos personalizados"
        fecha1 = utiles.obtenerFecha("d-m-Y h:m:s")
        print "Hora INICIO:",fecha1
        self.registroLOGenviados("Hora INICIO: "+fecha1)
        contadorClientes = 0
        for cliente in to:
            sigue = True
            contadorClientes+= 1
            if self.checkBox6.GetValue():
                if self.radioButton11.GetValue(): #hasta 9500
                    if contadorClientes <= 9500:
                        sigue = True
                    else:
                        sigue = False
                else: #desde 9500
                    if contadorClientes > 9500:
                        sigue = True
                    else:
                        sigue = False
            if not sigue: continue
            aux = cliente.split()
            email = aux[-1]
            nombre = cliente.replace(email,"")
            print nombre,email,
            try:
                nombre = unicode(str(nombre),'utf-8')
                html = html.replace("<MINOMBRE>",nombre)
                html = html.replace("\n","<br>")
                html = unicode(html)
                miTO = []
                miTO.append(unicode(str(email),'utf-8'))
            except:
                erroneos+= 1
                correosErroneos.append((nombre,email,"Falla codificacion"))
                self.registroLOGenviados(nombre+" "+email+" Falla codificacion")
                continue
                
            resultado = s.send(miTO,subject,text,html) 
            
            if resultado == '"OK"':
                enviados+= 1
                print resultado
            else:
                erroneos+= 1
                correosErroneos.append((nombre,email,resultado))
                print "ERROR"
            html = modelo
        fecha2 = utiles.obtenerFecha("d-m-Y h:m:s")
        print "Hora FIN:",fecha2
        self.registroLOGenviados("Hora FIN: "+fecha2)
        print "Enviando informe de resultados"
        subject = unicode('Informe de envios de campania','utf-8')
        to = reporteTO
        text = unicode('Informe de envios de campania','utf-8')
        
        cadena = "Tiempo inicio: "+fecha1+"<br>\n"
        cadena+= "Tiempo fin: "+fecha2+"<br><br>\n"
        cadena+= "Total enviados correctamente: "+str(enviados)+"<br>\n"
        cadena+= "Total enviados err&oacute;neamente: "+str(erroneos)+"<br><br>\n"
        if erroneos!=0:
            cadena+= "Detalle de errores: <br>\n"
            cadena+= "<ul>\n"
            for item in correosErroneos:
                nombre = item[0]
                email = item[1]
                texto = item[2]
                cadena+= "<li>"+nombre+" "+email+" --> "+texto+"</li>\n"
            cadena+= "</ul>"
        html = unicode(cadena)
        self.registroLOGenviados(cadena)
        resultado = s.send(to,subject,text,html) 
        print "Reportes de correos enviados: ",resultado
        
        texto = "Campania Personalizada procesada.\n"
        texto+= "Inicio: "+fecha1+"\nFin: "+fecha2
        self.registroLOGenviados(texto)
        utiles.mensaje(None,texto)

    def OnNoFracciona(self, event):
        self.radioButton5.Enable(False)
        self.radioButton6.Enable(False)
        self.radioButton7.Enable(False)
        self.radioButton8.Enable(False)
        self.button6.Enable(False)

    def OnParte2(self, event):
        self.radioButton5.Enable(True)
        self.radioButton6.Enable(True)
        self.radioButton7.Enable(False)
        self.radioButton8.Enable(False)
        self.button6.Enable(True)

    def OnParte3(self, event):
        self.radioButton5.Enable(True)
        self.radioButton6.Enable(True)
        self.radioButton7.Enable(True)
        self.radioButton8.Enable(False)
        self.button6.Enable(True)

    def OnParte4(self, event):
        self.radioButton5.Enable(True)
        self.radioButton6.Enable(True)
        self.radioButton7.Enable(True)
        self.radioButton8.Enable(True)
        self.button6.Enable(True)

    def OnGuardarPartes(self, event):
        if self.radioButton1.GetValue():
            return
        dividirEn = 1
        totalItems = len(self.listBox1.GetItems())
        parte1 = []
        parte2 = []
        parte3 = []
        parte4 = []
        if self.radioButton2.GetValue():
            dividirEn = 2
            divisor = totalItems / dividirEn
            parte1 = self.listBox1.GetItems()[0:divisor]
            parte2 = self.listBox1.GetItems()[divisor:]
        elif self.radioButton3.GetValue():
            dividirEn = 3
            divisor = totalItems / dividirEn
            parte1 = self.listBox1.GetItems()[0:divisor]
            parte2 = self.listBox1.GetItems()[divisor:divisor*2]
            parte3 = self.listBox1.GetItems()[divisor*2:]
        else:
            dividirEn = 4
            divisor = totalItems / dividirEn
            parte1 = self.listBox1.GetItems()[0:divisor]
            parte2 = self.listBox1.GetItems()[divisor:divisor*2]
            parte3 = self.listBox1.GetItems()[divisor*2:divisor*4]
            parte4 = self.listBox1.GetItems()[divisor*4:]

        f1=open("c:\\matrisamor.doc\\parte1.txt","w")
        for item in parte1:
            f1.write(item+"\n")
        f1.close()
        f2=open("c:\\matrisamor.doc\\parte2.txt","w")
        for item in parte2:
            f2.write(item+"\n")
        f2.close()
        f3=open("c:\\matrisamor.doc\\parte3.txt","w")
        for item in parte3:
            f3.write(item+"\n")
        f3.close()
        f4=open("c:\\matrisamor.doc\\parte4.txt","w")
        for item in parte4:
            f4.write(item+"\n")
        f4.close()

        utiles.mensaje(None,"Generados los archivos")
        
        self.listBox1.Clear()
        for item in parte1:
            self.listBox1.Append(item)
        self.textCtrl1.SetLabel(str(len(self.listBox1.GetItems())))

    def OnCheckFraccionarPORcantidad(self, event):
        if self.checkBox6.GetValue():
            self.radioButton1.Enable(False)
            self.radioButton2.Enable(False)
            self.radioButton3.Enable(False)
            self.radioButton4.Enable(False)
            self.radioButton5.Enable(False)
            self.radioButton6.Enable(False)
            self.radioButton7.Enable(False)
            self.radioButton8.Enable(False)
            self.button6.Enable(False)
            self.button7.Enable(False)
            self.radioButton1.SetValue(True)
            self.radioButton2.SetValue(False)
            self.radioButton3.SetValue(False)
            self.radioButton4.SetValue(False)
            self.radioButton5.SetValue(True)
            self.radioButton6.SetValue(False)
            self.radioButton7.SetValue(False)
            self.radioButton8.SetValue(False)
            self.radioButton11.Enable(True)
            self.radioButton12.Enable(True)
        else:
            self.radioButton1.Enable(True)
            self.radioButton2.Enable(True)
            self.radioButton3.Enable(True)
            self.radioButton4.Enable(True)
            self.radioButton5.Enable(False)
            self.radioButton6.Enable(False)
            self.radioButton7.Enable(False)
            self.radioButton8.Enable(False)
            self.button6.Enable(False)
            self.button7.Enable(True)
            self.radioButton1.SetValue(True)
            self.radioButton2.SetValue(False)
            self.radioButton3.SetValue(False)
            self.radioButton4.SetValue(False)
            self.radioButton5.SetValue(True)
            self.radioButton6.SetValue(False)
            self.radioButton7.SetValue(False)
            self.radioButton8.SetValue(False)
            self.radioButton11.Enable(False)
            self.radioButton12.Enable(False)
